Live Range Splitting in a Graph Coloring Register Allocator
نویسندگان
چکیده
Abstrac t . Graph coloring is the dominant paradigm for global register allocation [8, 7, 4]. Coloring allocators use an interference graph, Z, to model conflicts that prevent two values from sharing a register. Nodes in 2: represent live ranges. An edge between two nodes indicates that they are simultaneously live azld, thus, cannot share a register. The allocator tries to construct a k-coloring of 2:, for k equal to the number of registers on the target machine. If it succeeds, it maps the colors onto the machine registers to produce an allocation. Unfortunately, it may not discover a k-coloring. In that case, it sp///s some live ranges by saving their values to memory. Early coloring allocators spilled live ranges completely at each definition and use. This approach often introduces more spill code than necessary. This paper presents a global approach that avoids some spill code by splitting the live range, breaking it into smaller pieces.
منابع مشابه
Global Register Allocation Based on Graph Fusion
A register allocator must effectively deal with three issues: live range splitting, live range spilling, and register assignment. This paper presents a new coloring-based global register allocation algorithm that addresses all three issues in an integrated way: the algorithm starts with an interference graph for each region of the program, where a region can be a basic block, a loop nest, a sup...
متن کاملImproved Passive Splitting
We present a graph coloring register allocator which uses an improved form of passive live range splitting to reduce the count of dynamic spill operations. Program structure is used to guide the global splitting of live ranges and to place split operations at infrequently executed portions of the program. We also optimistically reconsider spill decisions at certain points to potentially enable ...
متن کاملRegister Spilling and Live-Range Splitting for SSA-Form Programs
Register allocation decides which parts of a variable’s live range are held in registers and which in memory. The compiler inserts spill code to move the values of variables between registers and memory. Since fetching data from memory is much slower than reading directly from a register, careful spill code insertion is critical for the performance of the compiled program. In this paper, we pre...
متن کاملApproaches to Enhance Graph Coloring Register Allocation
The relationship between run-time performance and effective use of a machine’s register set is well understood. Graph coloring method, which pioneered by Chaitin, has been widely practiced. In this paper, we describe three improvements to Chaitin-style graph coloring register allocators. The first is a more precise definition on interference. The second is called rename, which can be easily inc...
متن کاملCooperative Instruction Scheduling with Linear Scan Register Allocation
Linear scan register allocation is an attractive register allocation algorithm because of its simplicity and fast running time. However, it is generally felt that linear scan register allocation yields poorer code than allocation schemes based on graph coloring. In this paper, we propose a pre-pass instruction scheduling algorithm that improves on the code quality of linear scan allocators. Our...
متن کاملذخیره در منابع من
با ذخیره ی این منبع در منابع من، دسترسی به آن را برای استفاده های بعدی آسان تر کنید
عنوان ژورنال:
دوره شماره
صفحات -
تاریخ انتشار 1998